﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
using blacksoft.Models;
using blacksoft.Constantes;
using System.Threading;
using System.Globalization;
using System.Data.Entity.Core.Objects;
// actualizacion 12/06/2014 03:am
namespace blacksoft.Controllers
{
    public class DocumentoVentaController : Controller
    {
        private inf245travelbusEntities db = new inf245travelbusEntities();

        // GET: /DocumentoVenta/
        public ActionResult Index(string tb_CodDocVenta, string tb_FechaPago, string ddl_Estado, string tb_Cliente, string tb_NroDocCliente)
        {
            //NO ESTOY LOGUEADO EN EL SISTEMA
            if (Session["Permisos"] == null)
            {
                TempData["LogueatePrimero"] = SystemField.NO_LOGUEADO;
                return RedirectToAction("Index", "ValidarLogin");
            }
            //ESTOY LOGUEADO PERO NO TENGO PERMISO PARA REALIZAR ESTA ACCION
            if (!PerfilsController.TienePermiso((int)Session["Permisos"], PerfilsController.VENTA))
            {
                TempData["SinPermiso"] = SystemField.SIN_PERMISO;
                return RedirectToAction("Index", "MainPageEmployes");
            }
            //var documentoventa = db.DocumentoVenta.Include(d => d.Venta);
            

            bool global = PerfilsController.TienePermiso((int)Session["Permisos"], PerfilsController.GLOBAL);
            //Seleccionar todas las promociones
            var documento = from d in db.DocumentoVenta 
                            select d;
            //Local session
            int idTerminal;
            if (!global)
            {
                idTerminal = (int)Session["IDTerminal"];
                documento = from d in documento
                            join v in db.Venta on d.IDVenta equals v.IDVenta
                            join p in db.Persona on v.IDPersona equals p.IDPersona
                            where p.IDTerminal == idTerminal
                            select d;
            }

            var persona = from p in db.Persona select p;
            var venta = from v in db.Venta select v;



            //Filtrar por CÓDIGO DE VENTA
            if (!String.IsNullOrEmpty(tb_CodDocVenta))
            {

                try { 
                    int cod = int.Parse(tb_CodDocVenta);
                    documento = documento.Where(s => s.IDDocumentoVenta.Equals(cod));
                }
                catch
                {
                    TempData["index_failure"] = "EL codigo del Documento de Venta debe ser un numero";
                    return RedirectToAction("Index");
                }


            }
            //Filtrar por FECHA DE PAGO
            if (!String.IsNullOrEmpty(tb_FechaPago))
            {
                DateTime aux_date = Convert.ToDateTime(tb_FechaPago);
                documento = documento.Where(s => EntityFunctions.TruncateTime(s.FechaPago) == EntityFunctions.TruncateTime(aux_date));
            }
            //Filtrar por ESTADO
            if (!String.IsNullOrEmpty(ddl_Estado))
            {
                string estado;
                if (string.Compare(ddl_Estado, "ACTIVO") == 0) estado = "AC";
                else estado = "AN";

                documento = documento.Where(s => s.Estado.Equals(estado));

            }
            //Filtrar por Nombre de CLIENTE
            if (!String.IsNullOrEmpty(tb_Cliente))
            {
                documento = from d in db.DocumentoVenta
                            join v in db.Venta on d.IDVenta equals v.IDVenta
                            join p in db.Persona on v.IDPersona_Juridica equals p.IDPersona
                            where p.RazonSocial.Contains(tb_Cliente)
                            select d;
            }
            //Filtrar por DOC CLIENTE
            if (!String.IsNullOrEmpty(tb_NroDocCliente))
            {
                documento = from d in db.DocumentoVenta
                            join v in db.Venta on d.IDVenta equals v.IDVenta
                            join p in db.Persona on v.IDPersona_Juridica equals p.IDPersona
                            where p.RUC.Equals(tb_NroDocCliente)
                            select d;
            }




            return View(documento.ToList());
        }

        // GET: /DocumentoVenta/Show/5
        public ActionResult Show(int? id)
        {
            //NO ESTOY LOGUEADO EN EL SISTEMA
            if (Session["Permisos"] == null)
            {
                TempData["LogueatePrimero"] = SystemField.NO_LOGUEADO;
                return RedirectToAction("Index", "ValidarLogin");
            }
            //ESTOY LOGUEADO PERO NO TENGO PERMISO PARA REALIZAR ESTA ACCION
            if (!PerfilsController.TienePermiso((int)Session["Permisos"], PerfilsController.VENTA))
            {
                TempData["SinPermiso"] = SystemField.SIN_PERMISO;
                return RedirectToAction("Index", "MainPageEmployes");
            }
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            DocumentoVenta documentoventa = db.DocumentoVenta.Find(id);
            if (documentoventa == null)
            {
                return HttpNotFound();
            }
            return View(documentoventa);
        }
        

        [HttpPost, ActionName("Show")]
        [ValidateAntiForgeryToken]
        public ActionResult Show(int id)
        {
            //NO ESTOY LOGUEADO EN EL SISTEMA
            if (Session["Permisos"] == null)
            {
                TempData["LogueatePrimero"] = SystemField.NO_LOGUEADO;
                return RedirectToAction("Index", "ValidarLogin");
            }
            //ESTOY LOGUEADO PERO NO TENGO PERMISO PARA REALIZAR ESTA ACCION
            if (!PerfilsController.TienePermiso((int)Session["Permisos"], PerfilsController.VENTA))
            {
                TempData["SinPermiso"] = SystemField.SIN_PERMISO;
                return RedirectToAction("Index", "MainPageEmployes");
            }


            DocumentoVenta documentoventa = db.DocumentoVenta.Find(id);
            //NotaCredito NC = new NotaCredito();

            foreach (var pasajes in documentoventa.Pasajes)
            {

                List<NotaCredito> NotasVerificar = documentoventa.NotasCredito;
                if (NotasVerificar.Count()>0)
                {
                    TempData["show_failure"] = "Ya existe la(s) Nota(s) de Credito para esta Factura";
                    return RedirectToAction("Show");
                }


                NotaCredito NC = new NotaCredito();
                NC.FechaRegistro = DateTime.Now;
                NC.Total = pasajes.MontoPago;
                NC.IDPasaje = pasajes.IDPasaje;
                NC.Estado = "AC";
                NC.FechaLimite = DateTime.Now.AddMonths(3);
                db.NotaCredito.Add(NC);
                //db.SaveChanges();
            }

            documentoventa.Estado = "AN";
            db.Entry(documentoventa).State = EntityState.Modified;
            db.SaveChanges();

            return RedirectToAction("Print2", new { id = id });

        }

        //[HttpPost]
        //[ValidateAntiForgeryToken]
        //public ActionResult Show(DocumentoVenta doc_venta)
        //{


        //    foreach (var pj in doc_venta.Pasajes)
        //    {
        //        NotaCredito NC = new NotaCredito();
        //        NC.FechaRegistro = DateTime.Now;
        //        NC.Total = pj.MontoPago;
        //        NC.IDPasaje = pj.IDPasaje;
        //        NC.Estado = "AC";

        //        db.NotaCredito.Add(NC);
        //    }

        //    db.SaveChanges();

        //    return RedirectToAction("Print2", new { id = doc_venta.IDDocumentoVenta });

        //}



        //gallito
        public ActionResult Print(int? id)
        {
            //NO ESTOY LOGUEADO EN EL SISTEMA
            if (Session["Permisos"] == null)
            {
                TempData["LogueatePrimero"] = SystemField.NO_LOGUEADO;
                return RedirectToAction("Index", "ValidarLogin");
            }
            //ESTOY LOGUEADO PERO NO TENGO PERMISO PARA REALIZAR ESTA ACCION
            if (!PerfilsController.TienePermiso((int)Session["Permisos"], PerfilsController.VENTA))
            {
                TempData["SinPermiso"] = SystemField.SIN_PERMISO;
                return RedirectToAction("Index", "MainPageEmployes");
            }

            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            DocumentoVenta documentoventa = db.DocumentoVenta.Find(id);
            if (documentoventa == null)
            {
                return HttpNotFound();
            }
            return View(documentoventa);
        }



        public ActionResult Print2(int? id)
        {
            //NO ESTOY LOGUEADO EN EL SISTEMA
            if (Session["Permisos"] == null)
            {
                TempData["LogueatePrimero"] = SystemField.NO_LOGUEADO;
                return RedirectToAction("Index", "ValidarLogin");
            }
            //ESTOY LOGUEADO PERO NO TENGO PERMISO PARA REALIZAR ESTA ACCION
            if (!PerfilsController.TienePermiso((int)Session["Permisos"], PerfilsController.VENTA))
            {
                TempData["SinPermiso"] = SystemField.SIN_PERMISO;
                return RedirectToAction("Index", "MainPageEmployes");
            }

            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            DocumentoVenta documentoventa = db.DocumentoVenta.Find(id);
            if (documentoventa == null)
            {
                return HttpNotFound();
            }
            return View(documentoventa);
        }









        // GET: /DocumentoVenta/Create
        public ActionResult Create()
        {
            //NO ESTOY LOGUEADO EN EL SISTEMA
            if (Session["Permisos"] == null)
            {
                TempData["LogueatePrimero"] = SystemField.NO_LOGUEADO;
                return RedirectToAction("Index", "ValidarLogin");
            }
            //ESTOY LOGUEADO PERO NO TENGO PERMISO PARA REALIZAR ESTA ACCION
            if (!PerfilsController.TienePermiso((int)Session["Permisos"], PerfilsController.VENTA))
            {
                TempData["SinPermiso"] = SystemField.SIN_PERMISO;
                return RedirectToAction("Index", "MainPageEmployes");
            }
            ViewBag.IDVenta = new SelectList(db.Venta, "IDVenta", "MedioPago");
            return View();
        }

        // POST: /DocumentoVenta/Create
        // Para protegerse de ataques de publicación excesiva, habilite las propiedades específicas a las que desea enlazarse. Para obtener 
        // más información vea http://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create([Bind(Include = "IDDocumentoVenta,FechaPago,Subtotal,IGV,Total,IDVenta,Estado")] DocumentoVenta documentoventa)
        {
            //NO ESTOY LOGUEADO EN EL SISTEMA
            if (Session["Permisos"] == null)
            {
                TempData["LogueatePrimero"] = SystemField.NO_LOGUEADO;
                return RedirectToAction("Index", "ValidarLogin");
            }
            //ESTOY LOGUEADO PERO NO TENGO PERMISO PARA REALIZAR ESTA ACCION
            if (!PerfilsController.TienePermiso((int)Session["Permisos"], PerfilsController.VENTA))
            {
                TempData["SinPermiso"] = SystemField.SIN_PERMISO;
                return RedirectToAction("Index", "MainPageEmployes");
            }
            if (ModelState.IsValid)
            {
                db.DocumentoVenta.Add(documentoventa);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            ViewBag.IDVenta = new SelectList(db.Venta, "IDVenta", "MedioPago", documentoventa.IDVenta);
            return View(documentoventa);
        }

        // GET: /DocumentoVenta/Edit/5
        public ActionResult Edit(int? id)
        {
            //NO ESTOY LOGUEADO EN EL SISTEMA
            if (Session["Permisos"] == null)
            {
                TempData["LogueatePrimero"] = SystemField.NO_LOGUEADO;
                return RedirectToAction("Index", "ValidarLogin");
            }
            //ESTOY LOGUEADO PERO NO TENGO PERMISO PARA REALIZAR ESTA ACCION
            if (!PerfilsController.TienePermiso((int)Session["Permisos"], PerfilsController.VENTA))
            {
                TempData["SinPermiso"] = SystemField.SIN_PERMISO;
                return RedirectToAction("Index", "MainPageEmployes");
            }
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            DocumentoVenta documentoventa = db.DocumentoVenta.Find(id);
            if (documentoventa == null)
            {
                return HttpNotFound();
            }
            ViewBag.IDVenta = new SelectList(db.Venta, "IDVenta", "MedioPago", documentoventa.IDVenta);
            return View(documentoventa);
        }

        // POST: /DocumentoVenta/Edit/5
        // Para protegerse de ataques de publicación excesiva, habilite las propiedades específicas a las que desea enlazarse. Para obtener 
        // más información vea http://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit([Bind(Include = "IDDocumentoVenta,FechaPago,Subtotal,IGV,Total,Estado,IDVenta")] DocumentoVenta documentoventa)
        {
            //NO ESTOY LOGUEADO EN EL SISTEMA
            if (Session["Permisos"] == null)
            {
                TempData["LogueatePrimero"] = SystemField.NO_LOGUEADO;
                return RedirectToAction("Index", "ValidarLogin");
            }
            //ESTOY LOGUEADO PERO NO TENGO PERMISO PARA REALIZAR ESTA ACCION
            if (!PerfilsController.TienePermiso((int)Session["Permisos"], PerfilsController.VENTA))
            {
                TempData["SinPermiso"] = SystemField.SIN_PERMISO;
                return RedirectToAction("Index", "MainPageEmployes");
            }
            if (ModelState.IsValid)
            {
                db.Entry(documentoventa).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            ViewBag.IDVenta = new SelectList(db.Venta, "IDVenta", "MedioPago", documentoventa.IDVenta);
            return View(documentoventa);
        }

        // GET: /DocumentoVenta/Delete/5
        public ActionResult Delete(int? id)
        {
            //NO ESTOY LOGUEADO EN EL SISTEMA
            if (Session["Permisos"] == null)
            {
                TempData["LogueatePrimero"] = SystemField.NO_LOGUEADO;
                return RedirectToAction("Index", "ValidarLogin");
            }
            //ESTOY LOGUEADO PERO NO TENGO PERMISO PARA REALIZAR ESTA ACCION
            if (!PerfilsController.TienePermiso((int)Session["Permisos"], PerfilsController.VENTA))
            {
                TempData["SinPermiso"] = SystemField.SIN_PERMISO;
                return RedirectToAction("Index", "MainPageEmployes");
            }
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            DocumentoVenta documentoventa = db.DocumentoVenta.Find(id);
            if (documentoventa == null)
            {
                return HttpNotFound();
            }
            return View(documentoventa);
        }

        // POST: /DocumentoVenta/Delete/5
        [HttpPost, ActionName("Delete")]
        [ValidateAntiForgeryToken]
        public ActionResult DeleteConfirmed(int id)
        {
            //NO ESTOY LOGUEADO EN EL SISTEMA
            if (Session["Permisos"] == null)
            {
                TempData["LogueatePrimero"] = SystemField.NO_LOGUEADO;
                return RedirectToAction("Index", "ValidarLogin");
            }
            //ESTOY LOGUEADO PERO NO TENGO PERMISO PARA REALIZAR ESTA ACCION
            if (!PerfilsController.TienePermiso((int)Session["Permisos"], PerfilsController.VENTA))
            {
                TempData["SinPermiso"] = SystemField.SIN_PERMISO;
                return RedirectToAction("Index", "MainPageEmployes");
            }
            DocumentoVenta documentoventa = db.DocumentoVenta.Find(id);
            db.DocumentoVenta.Remove(documentoventa);
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        //daniel
        // GET: /DocumentoVenta/Show/3
        //public ActionResult Show(int? id)
        //{
        //    if (id == null)
        //    {
        //        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        //    }
        //    DocumentoVenta documentoVenta = db.DocumentoVenta.Find(id);
        //    if (documentoVenta == null)
        //    {
        //        return HttpNotFound();
        //    }
        //    return View(documentoVenta);
        //}//daniel

        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                db.Dispose();
            }
            base.Dispose(disposing);
        }

    }
}
